// src/request.ts
import axios, { AxiosInstance, AxiosResponse } from "axios";

// interface HttpRequestConfig extends AxiosRequestConfig {
//   // 自定义配置项，如果有
//   headers?: AxiosRequestHeaders;
// }

const baseURL = "/api"; // 基础URL可以根据环境变量调整

function createApiClient(baseURL: string): AxiosInstance {
  const instance = axios.create({
    baseURL,
    timeout: 5000, // 请求超时时间
    headers: { "Content-Type": "application/json" }, // 默认的请求头
  });

  // 请求拦截器
  // 修改后的请求拦截器部分
  instance.interceptors.request.use(
    (config) => {
      const token = localStorage.getItem("authToken");
      // 确保headers存在
      config.headers = config.headers || {};
      if (token) {
        config.headers.Authorization = `Bearer ${token}`;
      }
      return config;
    },
    (error) => {
      return Promise.reject(error);
    }
  );

  // 移除自定义的HttpRequestConfig接口，直接使用axios原生类型

  // 响应拦截器
  instance.interceptors.response.use(
    (response: AxiosResponse) => {
      // 对响应数据做点什么
      return response.data; // 假设我们只关心返回的数据部分
    },
    (error: { response: { status: number } }) => {
      // 对响应错误做点什么
      if (error.response && error.response.status === 401) {
        // 处理未授权的情况，比如跳转到登录页
        console.log("用户未登录或token已过期");
        // 跳转到登录页面或其他操作
      }
      return Promise.reject(error);
    }
  );

  return instance;
}

// 导出默认的Axios实例
const http = createApiClient(baseURL);

export default http;
